sizegroup: Don't invalidate over resize containers.
authorBenjamin Otte <otte@redhat.com>
Wed, 16 Sep 2015 20:56:56 +0000 (22:56 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 28 Oct 2015 18:44:28 +0000 (19:44 +0100)
Before this commit, a widget tree like this:
  Window
    AnyContainer (part of SizeGroup1)
      GtkClutterEmbed
        SomeWidget
when calling gtk_widget_queue_resize(SomeWidget), would invalidate
SizeGroup1, when it should have stopped at the GtkClutterEmbed (which is
a RESIZE_IMMEDIATE child).

gtk/gtksizegroup.c

index d6276a90f5a5d6b5f68b9cd53af78be93bd0e8cc..ef29358c9650cd0283614ec8f19606d799da4777 100644 (file)
@@ -237,7 +237,7 @@ queue_resize_on_widget (GtkWidget *widget,
 
   parent = widget;
 
-  while (parent)
+  do
     {
       if (widget == parent)
         real_queue_resize (widget);
@@ -271,8 +271,14 @@ queue_resize_on_widget (GtkWidget *widget,
             }
        }
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+      if (GTK_IS_RESIZE_CONTAINER (parent))
+        break;
+G_GNUC_END_IGNORE_DEPRECATIONS;
+
       parent = _gtk_widget_get_parent (parent);
     }
+  while (parent);
 
   g_hash_table_destroy (widgets);
   g_hash_table_destroy (groups);